package org.dromara.hm.domain.bo;

import org.dromara.hm.domain.HmSaleOrderRefund;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 退款退货明细业务对象 hm_sale_order_refund
 *
 * @author Hzy
 * @date 2025-04-10
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = HmSaleOrderRefund.class, reverseConvertGenerate = false)
public class HmSaleOrderRefundBo extends BaseEntity {

    /**
     * 退款记录ID
     */
    @NotBlank(message = "退款记录ID不能为空", groups = { EditGroup.class })
    private String refundId;

    /**
     * 销售订单ID
     */
    @NotBlank(message = "关联销售订单ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private String saleId;

    /**
     * 关联商品ID
     */
    private String saleProductId;

    /**
     * 商品类型
     */
    private String productType;

    /**
     * 类型（1-仅退款 2-退货退款）
     */
    @NotNull(message = "类型（1-仅退款 2-退货退款）不能为空", groups = { AddGroup.class, EditGroup.class })
    private Integer refundType;

    /**
     * 退款金额
     */
    private BigDecimal refundAmount;

    /**
     * 本次退货数量
     */
    private BigDecimal returnNum;

    /**
     * 实际回填库存数量 (只包含已提货部分)
     */
    private BigDecimal actualReturnToStockNum;


    /**
     * 申请时间
     */
//    @NotNull(message = "申请时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Date applyTime;

    /**
     * 处理人ID
     */
    private String processorId;

    /**
     * 处理时间
     */
    private Date processTime;

    /**
     * 状态（0-待审核 1-已通过 2-已拒绝 3-已完成）
     */
    private Integer status;

    /**
     * 原因编码（商品损坏/7天无理由等）
     */
    private String reasonCode;

    /**
     * 详细描述
     */
    private String description;

    /**
     * 证明材料（图片/文档路径）
     */
    private String proofFiles;

    /**
     * 是否退款
     */
    private Boolean applyForRefund;

    /**
     * 主产品退货已提货数量
     */
    private BigDecimal mainProductReturnPickedQty;

    /**
     * 主产品退货未提货数量
     */
    private BigDecimal mainProductReturnUnpickedQty;

    /**
     * 主产品单价(通过订单和销售量计算而来)
     */
    private BigDecimal mainProductUnitPrice;

    /**
     * 退货赠品
     */
    private List<HmReturnedGiftBo> returnedGifts;

    /**
     * 退货源(YTH-已提货; WTH-未提货)
     */
    private String returnSource;

    /**
     * 店铺ID (用于过滤)
     */
    private String storeId; // 新增字段，用于前端过滤

    /**
     * 销售人员ID (用于过滤)
     */
    private Long salespersonId; // 新增字段，用于前端过滤

}
